package models

import (
	"time"

	"gorm.io/gorm"
)

// BaseModel 基础模型
type BaseModel struct {
	ID        uint           `gorm:"primarykey" json:"id"`
	CreatedAt time.Time      `json:"create_time"`
	UpdatedAt time.Time      `json:"update_time"`
	DeletedAt gorm.DeletedAt `gorm:"index" json:"delete_time,omitempty"`
}

// 统一的响应结构
type Response struct {
	Code    int         `json:"code"`
	Message string      `json:"message"`
	Data    interface{} `json:"data,omitempty"`
}

// 分页参数
type PageParam struct {
	Page     int `form:"page" json:"page"`
	PageSize int `form:"page_size" json:"page_size"`
}

// 分页响应
type PageResponse struct {
	List     interface{} `json:"list"`
	Total    int64       `json:"total"`
	Page     int         `json:"page"`
	PageSize int         `json:"page_size"`
}

// Success 成功响应
func Success(data interface{}, message ...string) Response {
	msg := "success"
	if len(message) > 0 {
		msg = message[0]
	}
	return Response{
		Code:    200,
		Message: msg,
		Data:    data,
	}
}

// Error 错误响应
func Error(message string, code ...int) Response {
	errCode := 400
	if len(code) > 0 {
		errCode = code[0]
	}
	return Response{
		Code:    errCode,
		Message: message,
	}
}

// GetPage 获取分页参数
func (p *PageParam) GetPage() int {
	if p.Page <= 0 {
		return 1
	}
	return p.Page
}

// GetPageSize 获取每页数量
func (p *PageParam) GetPageSize() int {
	if p.PageSize <= 0 {
		return 10
	}
	if p.PageSize > 100 {
		return 100
	}
	return p.PageSize
}

// GetOffset 获取偏移量
func (p *PageParam) GetOffset() int {
	return (p.GetPage() - 1) * p.GetPageSize()
}
